package basic.Test;

class innerclassCallback2 extends Base {
	private int temperature;

	// 调节温度的真真实现在外部内中，但不提供给外部，只能通过内部类回调
	private void adjustTemperature(int temperature) {
		System.out.println("adjust temperature!");
		this.temperature = temperature;
	}

	// 实现回调接口
	//如果实现了Adjustable接口中的adjust()方法，并且把Base类中的adjust()方法覆盖了，
	//这意味着本类仅仅有调节温度的功能，但失去了调节速度的功能。或以使用内部类来解决这一问题
	private class Closure implements Adjustable {
		public void adjust(int temperature) {
			// 通过回调外部类中的实现来完成温度调节功能
			adjustTemperature(temperature);
		}
	}

	// 获取回调节引用
	public Adjustable getCallBackReference() {
		return new Closure();
	}

	public static void main(String[] args) {
		innerclassCallback2 sub = new innerclassCallback2();
		// 具有调节速度的功能
		sub.adjst(1);
		/*
		 *  回调: 又具有调节温度的功能
		 *  客户类先调用sub实例的getCallBackReference()方法，获得
		 *  内部类的Closure实例，然后再调用Closure实例的adjust()方
		 *  法，该方法又调用Sub实例的adjustTemperature()方法。这种
		 *  调用过程称为回调。
		 */
		sub.getCallBackReference().adjust(2);
	}
}

interface Adjustable {
	//功能：调节温度
	public void adjust(int temperature);
}

class Base {
	private int speed;

	//功能：调节速度
	public void adjst(int spped) {
		System.out.println("adjust speed!");
		this.speed = speed;
	}
}